GdkWindow *window;
GtkPositionType pos;
cairo_rectangle_int_t rect;
+ gulong unmap_id;
};
struct _GtkWindowPrivate
static void
popover_destroy (GtkWindowPopover *popover)
{
+ if (popover->unmap_id)
+ {
+ g_signal_handler_disconnect (popover->widget, popover->unmap_id);
+ popover->unmap_id = 0;
+ }
+
if (popover->widget && gtk_widget_get_parent (popover->widget))
gtk_widget_unparent (popover->widget);
gtk_grab_remove (widget);
}
+static void
+popover_unmap (GtkWidget *widget,
+ GtkWindowPopover *popover)
+{
+ if (popover->window)
+ {
+ if (gtk_widget_is_visible (popover->widget))
+ gtk_widget_unmap (popover->widget);
+ gdk_window_hide (popover->window);
+ }
+
+ if (popover->unmap_id)
+ {
+ g_signal_handler_disconnect (widget, popover->unmap_id);
+ popover->unmap_id = 0;
+ }
+}
+
static void
popover_map (GtkWidget *widget,
GtkWindowPopover *popover)
gdk_window_show (popover->window);
if (gtk_widget_get_visible (popover->widget))
- gtk_widget_map (popover->widget);
+ {
+ gtk_widget_map (popover->widget);
+ popover->unmap_id = g_signal_connect (popover->widget, "unmap",
+ G_CALLBACK (popover_unmap), popover);
+ }
}
}
return FALSE;
}
-static void
-popover_unmap (GtkWidget *widget,
- GtkWindowPopover *popover)
-{
- if (popover->window)
- {
- if (gtk_widget_is_visible (popover->widget))
- gtk_widget_unmap (popover->widget);
- gdk_window_hide (popover->window);
- }
-}
-
static void
gtk_window_unmap (GtkWidget *widget)
{